#include <iostream>

using namespace std;

const int N = 1e6 + 10;

typedef long long LL;

//1)定义变量
//	n：表示共n根木材
//	m：表示总共至少要砍m米的木材(>=m)
//	锯片高度为H，符合要求的锯片高度为ret
//2)随着锯片高度H的增加，总共能砍到木材的长度m在减少
//3)锯片高度<=ret时，得到的木材长度>=m米
//	锯片高度<ret时，得到的木材长度<m米

int n, m;
LL a[N];

LL calc(int x)
{
	LL sum = 0;
	for(int i = 1; i <= n; i++)
	{
		if(a[i] > x) sum += a[i] - x;
	}

	return sum;
}

int main()
{
	cin >> n >> m;
	for(int i = 1; i <= n; i++) cin >> a[i];
	
	LL left = 1, right = 2e9;
	while(left < right)
	{
		LL mid = left + (right - left + 1) / 2;
		if(calc(mid) >= m) left = mid;
		else right = mid - 1;
	}
	cout << left << endl;

	return 0;
}


